数据库搭建主要技术分析 | 您所在的位置:网站首页 › mysql 创建数据库实例 › 数据库搭建主要技术分析 |
![]() ![]() 安装 PostgreSQL。到其官网选择适合自己电脑配置的版本下载安装即可,安装过程除了设置密码(本文设置为“123456”),其他可选择全部默认,如实在不会可参考CSDN上的文章:PostgreSQL安装详细步骤(windows)。安装完之后在安装目录里还可以看到pgAdmin4,这个是自带的数据库图形化工具,最新版是Web 应用程序,有点类似 Python 的 Jupyter Notebook,可用来查看和操作postgresql 数据库。 Python上安装psycopg2 和 sqlalchemy 库。psycopg2 是 Python 连接PostgreSQL数据库的接口,sqlalchemy 应用更广泛,可连接数据库(MySQL, SQLite, PostgreSQL),尤其是对于 pandas 的dataframe型数据,操作起来十分方便。关于这两个 python 库的介绍网上有很多,这里不详细展开,在cmd上使用pip install xxx 进行安装即可。 1 ![]() 2 #先引入后面分析、可视化等可能用到的库import tushare as tsimport pandas as pd import numpy as npimport matplotlib.pyplot as plt#正常显示画图时出现的中文和负号from pylab import mplmpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False #设置tokentoken='输入你的token'pro = ts.pro_api(token) 数据获取函数,默认时间可以随时改动。 #如果报错,把tushare升级到最新 def get_data(code,start='20190101',end='20190425'): df=ts.pro_bar(ts_code=code, adj='qfq', start_date=start, end_date=end) return df 股票代码获取函数,获取最新交易日的代码。 #获取当前交易日最新的股票代码和简称 def get_code(): codes = pro.stock_basic(list_status='L').ts_code.values return codes 插入PostgreSQL 数据库操作,函数里使用了try...except...pass是为了避免某些数据出错导致程序崩溃。from sqlalchemy import create_engineimport psycopg2engine = create_engine('postgresql+psycopg2://postgres:123456@localhost:5432/postgres')def insert_sql(data,db_name,if_exists='append'): #使用try...except..continue避免出现错误,运行崩溃 try: data.to_sql(db_name,engine,index=False,if_exists=if_exists) #print(code+'写入数据库成功') except: pass 由于行情数据量庞大,下载比较慢,先下载20190101至20190425期间日交易 数据,后续再不断更新。 #下载20190101-20190425数据并插入数据库stock_data#此步骤比较耗费时间,大致25-35分钟左右for code in get_code(): data=get_data(code) insert_sql(data,'stock_data') #读取整张表数据df=pd.read_sql('stock_data',engine)print(len(df)) #输出结果:270998 #选取ts_code=000001.SZ的股票数据df=pd.read_sql("select * from stock_data where ts_code='000001.SZ'",engine)print(len(df)) 构建一个数据更新函数,可以下载和插入其他时间周期的数据。2018年1月1日至2019年4月25日,数据就已达到108万条。 #更新数据或下载其他期间数据 def update_sql(start,end,db_name): from datetime import datetime,timedelta for code in get_code(): data=get_data(code,start,end) insert_sql(data,db_name) print(f'{start}:{end}期间数据已成功更新') #下载20180101-20181231期间数据#只需运行一次,不再运行后可以注释掉#下载数据比较慢,需要20-35分钟左右start='20180101'end='20181231'db_name='stock_data' #数据下载和存入数据库update_sql(start,end,db_name) #使用pandas的read_sql读取数据df_all_data=pd.read_sql('stock_data',engine)print(len(df_all_data)) #输出结果:1087050 #查看交易代码和交易日期个数 print(len(df_all_data.ts_code.unique()))print(len(df_all_data.trade_date.unique())) #输出结果:3604;319 d=df_all_data.trade_date.unique()print(d.max())print(d.min()) 2019-04-25T00:00:00.0000000002018-01-02T00:00:00.000000000 #获取交易日2019年4月25日数据pd.read_sql("select * from stock_data where trade_date='2019-04-25' ",engine).head() 构建数据查询和可视化函数: def plot_data(condition,title): from pyecharts import Bar from sqlalchemy import create_engine engine = create_engine('postgresql+psycopg2://postgres:123456@localhost:5432/postgres') data=pd.read_sql("select * from stock_data where+"+ condition,engine) count_=data.groupby('trade_date')['ts_code'].count() attr=count_.index v1=count_.values bar=Bar(title,title_text_size=15) bar.add('',attr,v1,is_splitline_show=False,linewidth=2) return bar 查询股价低于2元个股数据分布 c1="close9.5"t2="股价涨幅超过9.5%个股时间分布"plot_data(c2,t2)查询股价日跌幅超过-9.5%个股数据分布: c3="pct_chg |
CopyRight 2018-2019 实验室设备网 版权所有 |